iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0
DevOps

DevOps 進化論:從全能型戰士到安全守門員系列 第 4

Day 4:CI/CD 是什麼?工具比較(Jenkins, GitHub Actions, GitLab CI)

  • 分享至 

  • xImage
  •  

●CI/CD是什麼?

主要目的是將軟體開發過程自動化,從最初的程式碼提交 (code commit) 到最終的部署 (deployment),可以拆成兩個部分來說明:

1.持續整合 CI(Continuous Integration)

▪開發人員每日將程式碼提交到共享儲存庫(GitHub/GitLab/Gitea),每次提交都會觸發 CI 伺服器上的自動化工作流程,這個流程能夠在整合開發人員的變更時,立即通知他們任何潛在的問題。
👉DevOps 透過這種小步快跑的程式碼演進方式,目的是防止所謂的合併衝突(Merge Conflict),時刻確保功能之間是持續處於相容的狀態。

2.持續交付 / 部署 CD(Continuous Delivery / Deployment)

▪ Continuous Delivery:建置與測試通過後,程式碼隨時可部署,但上線仍需人工觸發。
▪ Continuous Deployment:進一步自動化,測試通過後自動部署到生產環境,無需人工干預。
👉目的是減少人工作業風險,讓軟體能更快、更可靠地交付給用戶。

● CI/CD 帶來的好處

  1. 提高速度與自動化:減少手動操作,顯著加快開發與部署週期。
  2. 早期問題偵測與品質提升:及早發現錯誤,避免小問題演變成重大災難。
  3. 縮短交付週期:新功能更快到達用戶手中,符合敏捷開發需求。
  4. 回溯容易:出現問題可快速定位到版本與 commit。
  5. 跨團隊協作更順暢:開發、測試、維運在同一條自動化流程上協作,降低溝通成本。

🚨要實現 CI/CD,需要工具來支援自動化流程,以下介紹三個常見的解決方案:Jenkins、GitHub Actions、GitLab CI。

●Jenkins

https://ithelp.ithome.com.tw/upload/images/20250817/20178156j8PrBo8aUc.png

▪定義:

Jenkins 是一個開源的自動化伺服器,用於建置 (build)、測試 (test) 和部署 (deploy) 軟體,是目前最廣泛使用的 CI/CD 工具之一。

▪目的:

協助開發團隊將軟體建置與部署流程自動化,減少人工作業風險,加速交付週期,並在開發早期就能發現錯誤。

▪核心能力

1.完整的 CI/CD 支援:能自動觸發建置、測試與部署,確保程式碼隨時維持最新狀態。

2.Pipeline as Code:透過 Groovy DSL 定義流程,可版本化並共享。

3.高彈性與可擴充性:擁有大量外掛 (plugins),幾乎可以整合任何版本控制系統、建置工具或雲端平台。

4.社群活躍:作為歷史悠久的工具,Jenkins 擁有龐大的使用者與插件生態,能滿足多樣化的需求。

●Github Actions

https://ithelp.ithome.com.tw/upload/images/20250817/20178156s0anJ7sLcz.png

▪定義:

GitHub Actions 是 GitHub 提供的自動化工作流程平台,可以讓開發者透過「事件觸發」執行建置、測試與部署等流程。

▪目的:

讓開發者能在不額外維護伺服器的情況下,直接在 GitHub 儲存庫中建立 CI/CD pipeline,並透過 YAML 配置自動化流程(如部署、測試、安全檢查)。

▪核心能力

1.事件驅動:支援多種觸發事件,例如 push、pull request、issue 建立或定時排程。

2.Workflow as Code:透過 .github/workflows/*.yml 檔案定義 pipeline,可版本化管理。

3.Marketplace 整合:可直接使用社群或官方提供的 Actions(如自動化測試、部署到雲端),降低自訂腳本的成本。

4.雲端原生:與 GitHub 無縫整合,適合快速部署到 AWS、GCP、Azure 等雲端平台。

📌 例子:當你 push 到 main 分支,就會自動觸發 workflow,完成建置與部署,將專案上傳到 Google Cloud。

●GitLab CI

https://ithelp.ithome.com.tw/upload/images/20250817/20178156KNlMdZwBp5.png

▪定義:

GitLab CI 是 GitLab 內建的持續整合與持續交付 (CI/CD) 平台,能與 GitLab 儲存庫緊密整合,透過 .gitlab-ci.yml 檔案描述整個建置、測試與部署流程。

▪目的:

讓開發團隊在提交程式碼時,能自動觸發 CI/CD pipeline,確保程式碼能快速、安全地建置與部署,並且降低伺服器維護與額外工具整合的負擔。

▪核心能力

1.開箱即用整合:不需要像 Jenkins 那樣自行架設伺服器,只要在 GitLab 上建立專案,就能直接使用 CI/CD pipeline。

2.Pipeline as Code:透過 .gitlab-ci.yml 檔案定義流程,讓建置、測試、部署都成為程式碼的一部分,可版本化與共享。

3.自動化流程:每次 commit 或 merge request 都會自動執行 pipeline,持續驗證程式碼品質。

4.完整生態系支援:GitLab 提供整合測試、部署、容器 (Kubernetes / Docker) 與安全掃描,讓團隊可以在同一平台完成 DevOps。

●Jenkins, GitHub Actions, GitLab CI三者差異

https://ithelp.ithome.com.tw/upload/images/20250817/20178156rQEPMM9Wca.png

▪Jenkins:

高度客製化、需要自己維護伺服器,適合中大型企業。

▪GitHub Actions:

與 GitHub 整合最佳,適合開源社群與雲端專案。

▪GitLab CI:

內建於 GitLab,開箱即用,整合度高,適合團隊想要「一站式」管理。


上一篇
Day 3:Git Flow vs GitHub Flow vs GitLab Flow - 如何選擇最適合的版本控制策略
下一篇
Day 5:建立簡易的CI pipeline (GitHub Actions)
系列文
DevOps 進化論:從全能型戰士到安全守門員19
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言